home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 2005 October / Computer Shopper 2005 October.iso / Toolkit / Enhance / Treesize / TreeSizePro-Setup.exe / {app} / tsizepro.xsl < prev   
Extensible Markup Language  |  2005-06-07  |  12KB  |  306 lines

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="html" encoding="ISO-8859-1"/>
  4.  
  5. <!-- These declaration define the behavior of the size units. If you want to have a kB conversion for example, replace "$MB" with "$kB"
  6. However, the unit identifier is printed statically. Be sure to change them, too. -->
  7. <xsl:decimal-format decimal-separator="," grouping-separator="."/> <!-- setting decimal number format e.g.: 1.000,00 -->
  8. <xsl:variable name="kB">1024</xsl:variable> <!-- kB divisor -->
  9. <xsl:variable name="MB">1048576</xsl:variable> <!-- MB divisor -->
  10. <xsl:variable name="GB">1073741824</xsl:variable> <!-- GB divisor -->
  11. <xsl:variable name="Drivefs">#.##0,0#</xsl:variable> <!-- GB format string -->
  12. <xsl:variable name="Folderfs">#.##0,00</xsl:variable> <!-- MB format string -->
  13.  
  14. <xsl:template match="/Root"> <!-- root template, it calls the template "main" -->
  15.    <xsl:call-template name="main" />
  16. </xsl:template>
  17.  
  18. <xsl:template name="main"> <!-- this is the main template, it applies and calls all the other templates and thereby defines their order -->
  19.   <html>
  20.   <head>
  21.   <title>TreeSize Professional Report, <xsl:value-of select="Date" /></title>
  22.   <style type="text/css"> <!-- these are all the stylesheet definitions used in the output -->
  23.      body {font-family: Arial;} /* font of the other tags */
  24.      h1,h2,h3 {text-align:center;} /* center headlines */
  25.      table {font-family:Arial Narrow; Arial; padding:2px;} /* tree-table design */
  26.      th {border-bottom-color:#000; border-bottom-style:solid; border-bottom-width:1px;} /* line drawn on the bottom of  the th's */
  27.      .box {display:none;} /* invisible div's */
  28.      .boxon {display:block;} /* visible div's */
  29.      .tree {font-family:Courier;} /* indention and '+'/'-' font */
  30.      .tabbig {width:17em; text-align:left;} /* name column */
  31.      .tab {width:6em; text-align:center;} /* size column */
  32.      .tabright {width:6em; text-align:right;} /* compression column */
  33.   </style>
  34.   <script type="text/javascript"> <!-- JavaScript functions to create tree effects view design -->
  35.   function SwitchDisplay(node) // function which changes the visibility of the div's
  36.   {
  37.   var nextnode = node.nextSibling;  // get next sibling node
  38.   if (nextnode.style.display != "block") // change visibility into the opposite
  39.      {
  40.      nextnode.style.display = "block";
  41.      }
  42.   else
  43.      {
  44.      nextnode.style.display = "none";
  45.      }
  46.   SwitchTreeSymbol(node);
  47.   }
  48.  
  49.   function SwitchTreeSymbol(node) // function which switches the + into - and vice versa
  50.   {
  51.   if (node.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild != null) // check if node is available
  52.      {
  53.      var targetnode = node.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild; // get suitable node (the span-tag)
  54.      s = new String(targetnode.nodeValue); // get the node's text
  55.      if ((i = s.indexOf("+")) != -1) // switch tree symbol into it's opposite
  56.         {
  57.         targetnode.nodeValue = (s.substr(0,i) + "-" + s.substr(i+1,s.length));
  58.         }
  59.      else if ((i = s.indexOf("-")) != -1)
  60.         {
  61.         targetnode.nodeValue = (s.substr(0,i) + "+" + s.substr(i+1,s.length));
  62.         }
  63.      }
  64.   }
  65.  
  66.   function twodigits(n) // function which creates an extended date, e.g. "1" becomes "01"
  67.   {
  68.   if (n < 10) // if (n less than 10)
  69.       return "0" + n;
  70.   else
  71.       return n;
  72.   }
  73.  
  74.   function TimeConversion(highfiletime) // converts the FileTime value into JavaScript's intern time and then into a
  75.   {
  76.   // human-readable format. However, this is not 100% accurate, because
  77.   // only the upper 32 bits of the Windows timestamp are converted.
  78.   if (highfiletime != 0)
  79.       {
  80.       highfiletime = (highfiletime - 27111902) * 429.4967296;
  81.         var javatime = new Date(highfiletime * 1000); // JavaScript's intern time: milliseconds since 01.01.1970 00:00:00
  82.         return twodigits(javatime.getDate()) + "." + twodigits((javatime.getMonth() + 1)) + "." + javatime.getFullYear();
  83.          }
  84.      else
  85.          return "N/A";
  86.     }
  87.   </script>
  88.   </head>
  89.   <body>
  90.   <xsl:call-template name="Title" /> <!-- title -->
  91.   <xsl:apply-templates select="Path" /> <!-- path -->
  92.   <xsl:call-template name="Includes" /> <!-- includes -->
  93.   <xsl:apply-templates select="ExcludePatterns" /> <!-- excludes -->
  94.   <xsl:call-template name="DriveDetails" /> <!-- drive details -->
  95.   <xsl:call-template name="FolderDetails" /> <!-- folder details -->
  96.   <xsl:call-template name="TableSetup" /> <!-- table setup (prints th's) -->
  97.   <xsl:call-template name="TreeRecursion"> <!-- tree recursion -->
  98.     <xsl:with-param name="pathpar" select="/Root/Folder" /> <!-- giving path parameter -->
  99.   </xsl:call-template>
  100.   </body>
  101.   </html>
  102. </xsl:template>
  103.  
  104. <xsl:template name="Title">
  105.   <h1 align="center">TreeSize Professional Report, <xsl:value-of select="Date" /></h1>
  106. </xsl:template>
  107.  
  108. <xsl:template match="Path">
  109.  <h2 align="center">
  110.   <xsl:value-of select="." />
  111.  </h2>
  112. </xsl:template>
  113.  
  114. <xsl:template name="Includes">
  115.   <xsl:if test="(ArchiveBitFilesOnly != 0) or (CreatedPastDaysOnly != 0) or (Filter/pattern != '*')">
  116.     <h3>
  117.     Includes:
  118.     <xsl:apply-templates select="ArchiveBitFilesOnly" />
  119.     <xsl:apply-templates select="CreatedPastDaysOnly" />
  120.     <xsl:apply-templates select="Filter" />
  121.     </h3>
  122.   </xsl:if>
  123. </xsl:template>
  124.  
  125. <xsl:template match="ArchiveBitFilesOnly">
  126.   <xsl:if test=". != 0">
  127.     Only Files created in the past.
  128.   </xsl:if>
  129. </xsl:template>
  130.  
  131. <xsl:template match="CreatedPastDaysOnly">
  132.   <xsl:if test=". != 0">
  133.     Only Files with Archive Bit set.
  134.   </xsl:if>
  135. </xsl:template>
  136.  
  137. <xsl:template match="Filter">
  138.   <xsl:if test="pattern != '*' ">
  139.     <xsl:value-of select="pattern" />
  140.   </xsl:if>
  141. </xsl:template>
  142.  
  143. <xsl:template match="ExcludePatterns">
  144.   <xsl:if test="pattern">
  145.   Excludes:
  146.     <xsl:for-each select="pattern">
  147.       <xsl:value-of select="." />
  148.       <xsl:if test="position() != last()">, </xsl:if>
  149.     </xsl:for-each>
  150.   </xsl:if>
  151. </xsl:template>
  152.  
  153. <xsl:template name="DriveDetails">
  154.   <h3>
  155.   Drive:
  156.     <xsl:apply-templates select="UsedBytesOnDrive" />
  157.     <xsl:apply-templates select="FreeBytesOnDrive" />
  158.     <xsl:apply-templates select="BytesPerCluster" /> Bytes
  159.     Filesystem: (<xsl:apply-templates select="Filesystem" />)
  160.   </h3>
  161. </xsl:template>
  162.  
  163. <xsl:template match="UsedBytesOnDrive"> <!-- drive size -->
  164.   Size: <xsl:value-of select="format-number(. div $GB,$Drivefs)" /> GB
  165. </xsl:template>
  166.  
  167. <xsl:template match="FreeBytesOnDrive"> <!-- free size on drive -->
  168.   Free: <xsl:value-of select="format-number(. div $GB,$Drivefs)" /> GB
  169. </xsl:template>
  170.  
  171. <xsl:template match="BytesPerCluster"> <!-- bytes per cluster -->
  172.   Bytes per Cluster:
  173.   <xsl:value-of select="." />
  174. </xsl:template>
  175.  
  176. <xsl:template match="Filesystem"> <!-- used filesystem -->
  177.   <xsl:value-of select="." />
  178. </xsl:template>
  179.  
  180. <xsl:template name="FolderDetails"> <!-- details of the folder, which was scanned -->
  181.   <h3>
  182.   This Folder:
  183.   <xsl:apply-templates select="Folder/SizeData" />
  184.   </h3>
  185. </xsl:template>
  186.  
  187. <xsl:template match="SizeData"> <!-- size data of scanned folder -->
  188.     Size: <xsl:value-of select="format-number(@Size div $MB,$Folderfs)" /> MB <!-- formatting numbers -->
  189.     Allocated: <xsl:value-of select="format-number(@Allocated div $MB,$Folderfs)" /> MB
  190.     Wasted: <xsl:value-of select="format-number(@Wasted div $MB,$Folderfs)" /> MB
  191.     Files: <xsl:value-of select="@Files" />
  192.     Folders: <xsl:value-of select="@Folders" />
  193.     Compression:
  194.     <xsl:if test="@Compression = 0">Yes</xsl:if> <!-- compression -->
  195.     <xsl:if test="@Compression = 1">No</xsl:if>
  196. </xsl:template>
  197.  
  198. <xsl:template name="TableSetup"> <!-- prints the table header -->
  199.   <br />
  200.   <table align="center" cellspacing="0">
  201.   <tr>
  202.   <th class="tabbig">Name:</th>
  203.   <th class="tabright">Size:</th>
  204.   <th class="tabright">Allocated:</th>
  205.   <th class="tabright">Wasted:</th>
  206.   <th class="tabright">Files:</th>
  207.   <th class="tabright">Folders:</th>
  208.   <th class="tabright">Last Change:</th>
  209.   <th class="tab">Compression:</th>
  210.   </tr>
  211.   </table>
  212. </xsl:template>
  213.  
  214. <xsl:template name="TreeRecursion"> <!-- creates the tree structure -->
  215. <xsl:param name="pathpar" />
  216.   <div>
  217.     <div onClick="SwitchDisplay(this);">
  218.     <xsl:if test="$pathpar != /Root/Folder">
  219.       <xsl:call-template name="DescendantsSizeData">
  220.         <xsl:with-param name="pathpar" select="." />
  221.       </xsl:call-template>
  222.     </xsl:if>
  223.     </div>
  224.   <xsl:variable name="showmode">
  225.   <xsl:choose>
  226.     <xsl:when test="$pathpar = /Root/Folder">boxon</xsl:when>
  227.     <xsl:otherwise>box</xsl:otherwise>
  228.   </xsl:choose>
  229.   </xsl:variable>
  230.   <div class="{$showmode}">
  231.   <xsl:for-each select="$pathpar/Folder">
  232.     <xsl:call-template name="TreeRecursion">
  233.       <xsl:with-param name="pathpar" select="." />
  234.     </xsl:call-template>
  235.   </xsl:for-each>
  236.   </div>
  237.   </div>
  238. </xsl:template>
  239.  
  240. <xsl:template name="DescendantsSizeData"> <!-- prints the size data row of the current folder -->
  241. <xsl:param name="pathpar" />
  242.   <table align="center" cellspacing="0">
  243.   <tr>
  244.   <xsl:variable name="indentname">
  245.     <xsl:call-template name="strlengthcheck"><xsl:with-param name="indention" select="count(ancestor::Folder)-1" /><xsl:with-param name="pathpar" select="$pathpar" /></xsl:call-template>
  246.   </xsl:variable>
  247.   <xsl:variable name="fullname" select="$pathpar/Name"></xsl:variable>
  248.   <td class="tabbig" title="{$fullname}">
  249.   <span class="tree">
  250.     <xsl:call-template name="IndentRecursiveLoop">
  251.       <xsl:with-param name="counter" select="count(ancestor::Folder)-1" />
  252.     </xsl:call-template>
  253.     </span>
  254.   <xsl:value-of select="$indentname" />
  255.   </td>
  256.   <td class="tabright"><xsl:value-of select="format-number($pathpar/SizeData/@Size div $MB,$Folderfs)" /> MB</td> <!-- formatting numbers -->
  257.   <td class="tabright"><xsl:value-of select="format-number($pathpar/SizeData/@Allocated div $MB,$Folderfs)" /> MB</td>
  258.   <td class="tabright"><xsl:value-of select="format-number($pathpar/SizeData/@Wasted div $MB,$Folderfs)" /> MB</td>
  259.   <td class="tabright"><xsl:value-of select="$pathpar/SizeData/@Files" /></td>
  260.   <td class="tabright"><xsl:value-of select="$pathpar/SizeData/@Folders" /></td>
  261.   <xsl:variable name="accesstime" select="$pathpar/LastChangeDate/@High"/>
  262.   <xsl:variable name="uid" select="generate-id($pathpar)" /> <!-- generating unique id -->
  263.   <td class="tabright" id="{$uid}"> 
  264.   </td>
  265.   <script type="text/javascript">
  266.       //var mytdtext = "<xsl:value-of select="$accesstime" />";
  267.   document.getElementById("<xsl:value-of select="$uid" />").firstChild.nodeValue = TimeConversion(<xsl:value-of select="$accesstime" />);
  268.   </script>
  269.   <td class="tab">
  270.     <xsl:if test="$pathpar/SizeData/@Compression = 0">Yes</xsl:if> <!-- compression -->
  271.     <xsl:if test="$pathpar/SizeData/@Compression = 1">No</xsl:if>
  272.   </td>
  273.   </tr>
  274.   </table>
  275. </xsl:template>
  276.  
  277. <xsl:template name="strlengthcheck"> <!-- cuts too long names and adds "..." -->
  278. <xsl:param name="indention" />
  279. <xsl:param name="pathpar" />
  280.   <xsl:choose>
  281.     <xsl:when test="(string-length($pathpar/Name) + $indention) >= 28">
  282.       <xsl:value-of select="substring($pathpar/Name,1,(25-$indention))" />...
  283.     </xsl:when>
  284.     <xsl:otherwise>
  285.       <xsl:value-of select="$pathpar/Name" />
  286.     </xsl:otherwise>
  287.   </xsl:choose>
  288. </xsl:template>
  289.  
  290. <xsl:template name="IndentRecursiveLoop"> <!-- makes indention used to make the tree hierarchy visible -->
  291. <xsl:param name="counter" />
  292.   <xsl:choose>
  293.     <xsl:when test="$counter > 0">
  294.        
  295.       <xsl:call-template name="IndentRecursiveLoop">
  296.         <xsl:with-param name="counter" select="($counter)-1" />
  297.       </xsl:call-template>
  298.     </xsl:when>
  299.     <xsl:when test="count(./Folder)">
  300.       +
  301.     </xsl:when>
  302.   </xsl:choose>
  303. </xsl:template>
  304.  
  305. </xsl:stylesheet>
  306.